Imports System.Data.SqlClient
Imports System.ComponentModel
Public Class cls_asiento_

    Implements ICloneable

#Region "Variables ..."
    Private int_idasiento As Integer = 0
    Private int_idtercero As Integer = 0
    Private dte_fecha As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private int_tipoimporte As enu_tipoimporte = 0
    Private dbl_importe As Double = 0
    Private str_observaciones As String = ""
    Private int_tipo As cls_documento_.enu_tipodocumento
    Private int_iddocumento As Integer = 0
    Private int_idregistro As Integer = 0
    Private int_idasientoconcepto As Integer = 0

    Private dte_vencimiento As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private dte_vencimientoRE As DateTime = New System.DateTime(Now.Year, 1, 1)

    Private dec_saldo As Decimal = 0
    Private dec_pendiente As Decimal = 0

    Private obj_registro As cls_registro_ = Nothing
    Private obj_tercero As cls_tercero_ = Nothing
    Private obj_documento As cls_documento_ = Nothing
    Private obj_asientoconcepto As cls_asientoconcepto_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_asiento_) = Nothing

    Public Enum enu_tipoimporte
        <Description("Ingreso")> Ingreso = 0
        <Description("Salida")> Salida = 1
    End Enum

    Public Overrides Function ToString() As String
        Return importe
    End Function
#End Region

#Region "Propiedades ..."
    ReadOnly Property saldo As Decimal
        Get
            saldo = dec_saldo
        End Get
    End Property
    Property idasiento() As Integer
        Get
            idasiento = int_idasiento
        End Get
        Set(ByVal value As Integer)
            int_idasiento = value
        End Set
    End Property
    Property idtercero() As Integer
        Get
            idtercero = int_idtercero
        End Get
        Set(ByVal value As Integer)
            int_idtercero = value
        End Set
    End Property
    Property fecha() As DateTime
        Get
            fecha = dte_fecha
        End Get
        Set(ByVal value As DateTime)
            dte_fecha = value
        End Set
    End Property
    Property tipoimporte() As enu_tipoimporte
        Get
            tipoimporte = int_tipoimporte
        End Get
        Set(ByVal value As enu_tipoimporte)
            int_tipoimporte = value
        End Set
    End Property
    Property importe() As Double
        Get
            importe = dbl_importe
        End Get
        Set(ByVal value As Double)
            dbl_importe = value
        End Set
    End Property
    Property observaciones() As String
        Get
            observaciones = str_observaciones
        End Get
        Set(ByVal value As String)
            str_observaciones = value
        End Set
    End Property
    Property tipo() As cls_documento_.enu_tipodocumento
        Get
            tipo = int_tipo
        End Get
        Set(ByVal value As cls_documento_.enu_tipodocumento)
            int_tipo = value
        End Set
    End Property
    Property iddocumento() As Integer
        Get
            iddocumento = int_iddocumento
        End Get
        Set(ByVal value As Integer)
            int_iddocumento = value
        End Set
    End Property
    Property idregistro() As Integer
        Get
            idregistro = int_idregistro
        End Get
        Set(ByVal value As Integer)
            int_idregistro = value
        End Set
    End Property
    Property idasientoconcepto As Integer
        Get
            idasientoconcepto = int_idasientoconcepto
        End Get
        Set(value As Integer)
            int_idasientoconcepto = value
        End Set
    End Property
    Property vencimiento As DateTime
        Get
            vencimiento = dte_vencimiento
        End Get
        Set(ByVal value As DateTime)
            dte_vencimiento = value
        End Set
    End Property
    Property vencimientoRE As DateTime
        Get
            vencimientoRE = dte_vencimientoRE
        End Get
        Set(ByVal value As DateTime)
            dte_vencimientoRE = value
        End Set
    End Property

    Property registro() As cls_registro_
        Get
            If IsNothing(obj_registro) Then
                obj_registro = New cls_registro_
                If Not obj_registro.Buscar(idregistro) Then
                    obj_registro = Nothing
                End If
            End If
            registro = obj_registro
        End Get
        Set(ByVal value As cls_registro_)
            obj_registro = value
        End Set
    End Property
    Property documento() As cls_documento_
        Get
            If tipo <> cls_documento_.enu_tipodocumento.Caja And tipo <> cls_documento_.enu_tipodocumento.Manual Then
                If IsNothing(obj_documento) Then
                    obj_documento = New cls_documento_
                    If Not obj_documento.Buscar(iddocumento) Then
                        obj_documento = Nothing
                    End If
                End If
            Else
                obj_documento = Nothing
            End If
            documento = obj_documento
        End Get
        Set(ByVal value As cls_documento_)
            obj_documento = value
        End Set
    End Property
    Property asientoconcepto() As cls_asientoconcepto_
        Get
            If IsNothing(obj_asientoconcepto) Then
                obj_asientoconcepto = New cls_asientoconcepto_
                If Not obj_asientoconcepto.Buscar(idasientoconcepto) Then
                    obj_asientoconcepto = Nothing
                End If
            End If
            asientoconcepto = obj_asientoconcepto
        End Get
        Set(ByVal value As cls_asientoconcepto_)
            obj_asientoconcepto = value
        End Set
    End Property
    Property tercero() As cls_tercero_
        Get
            If IsNothing(obj_tercero) Then
                obj_tercero = New cls_tercero_
                If Not obj_tercero.Buscar(idtercero) Then
                    obj_tercero = Nothing
                End If
            End If
            tercero = obj_tercero
        End Get
        Set(ByVal value As cls_tercero_)
            obj_tercero = value
        End Set
    End Property
    ReadOnly Property pendiente As Decimal
        Get
            pendiente = dec_pendiente
        End Get
    End Property
    Property Items() As Collections.Generic.List(Of cls_asiento_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_asiento_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_asiento_)
        While obj_Reader.Read()
            Dim Elemento As New cls_asiento_
            Elemento.int_idasiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idasiento")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero"))) = False Then
                Elemento.int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
                Elemento.dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipoimporte"))) = False Then
                Elemento.int_tipoimporte = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipoimporte")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("importe"))) = False Then
                Elemento.dbl_importe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("importe")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
                Elemento.str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
                Elemento.int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("iddocumento"))) = False Then
                Elemento.int_iddocumento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("iddocumento")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro"))) = False Then
                Elemento.int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idasientoconcepto"))) = False Then
                Elemento.int_idasientoconcepto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idasientoconcepto")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento"))) = False Then
                Elemento.dte_vencimiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRE"))) = False Then
                Elemento.dte_vencimientoRE = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRE")))
            End If
            Try
                If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("saldo"))) = False Then
                    Elemento.dec_saldo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("saldo")))
                End If
                If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente"))) = False Then
                    Elemento.dec_pendiente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente")))
                End If
            Catch ex As Exception
            End Try
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idasiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idasiento")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero"))) = False Then
            int_idtercero = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idtercero")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
            dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipoimporte"))) = False Then
            int_tipoimporte = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipoimporte")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("importe"))) = False Then
            dbl_importe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("importe")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
            str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo"))) = False Then
            int_tipo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tipo")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("iddocumento"))) = False Then
            int_iddocumento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("iddocumento")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro"))) = False Then
            int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idasientoconcepto"))) = False Then
            int_idasientoconcepto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idasientoconcepto")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento"))) = False Then
            dte_vencimiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRE"))) = False Then
            dte_vencimientoRE = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRE")))
        End If
        Try
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("saldo"))) = False Then
                dec_saldo = (obj_Reader.GetValue(obj_Reader.GetOrdinal("saldo")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente"))) = False Then
                dec_pendiente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pendiente")))
            End If
        Catch ex As Exception

        End Try

    End Sub

    Public Sub Nuevo(Optional ByVal ObtenerID As Boolean = False)
        Dim obj_Conexion As New cls_Conexion
        Try

            'Creacion de registro----------------------------------------------------
            If IsNothing(obj_registro) Then
                registro = New cls_registro_
                registro.fechacreado = Now
                registro.idusuariocreado = UsuarioLOG.idusuario
                registro.fechamodificado = Now
                registro.idusuariomodificado = UsuarioLOG.idusuario
                registro.idregistroestado = 1
                registro.idusuarioregistroestado = UsuarioLOG.idusuario
                registro.Nuevo(True)
                idregistro = obj_registro.idregistro
            End If
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__Nuevo"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .Parameters.Add("@tipoimporte", SqlDbType.Int).Value = int_tipoimporte
                .Parameters.Add("@importe", SqlDbType.Decimal).Value = dbl_importe
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@iddocumento", SqlDbType.Int).Value = int_iddocumento
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idasientoconcepto", SqlDbType.Int).Value = int_idasientoconcepto
                .Parameters.Add("@vencimiento", SqlDbType.DateTime).Value = dte_vencimiento
                .Parameters.Add("@vencimientoRE", SqlDbType.DateTime).Value = dte_vencimientoRE
                .ExecuteNonQuery()
            End With
            If ObtenerID Then
                CargarUltimo()
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Crear el registro de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try

            'Modificacion de registro------------------------------------------------
            registro.fechamodificado = Now : registro.idusuariomodificado = UsuarioLOG.idusuario
            registro.Modificar()
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__Modificar"
                .Parameters.Add("@idasiento", SqlDbType.Int).Value = int_idasiento
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = int_idtercero
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .Parameters.Add("@tipoimporte", SqlDbType.Int).Value = int_tipoimporte
                .Parameters.Add("@importe", SqlDbType.Decimal).Value = dbl_importe
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@tipo", SqlDbType.Int).Value = int_tipo
                .Parameters.Add("@iddocumento", SqlDbType.Int).Value = int_iddocumento
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idasientoconcepto", SqlDbType.Int).Value = int_idasientoconcepto
                .Parameters.Add("@vencimiento", SqlDbType.DateTime).Value = dte_vencimiento
                .Parameters.Add("@vencimientoRE", SqlDbType.DateTime).Value = dte_vencimientoRE
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Modificar el registro de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idasiento As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__Eliminar"
                .Parameters.Add("@idasiento", SqlDbType.Int).Value = idasiento
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Eliminar el registro de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idasiento As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__Buscar"
                .Parameters.Add("@idasiento", SqlDbType.Int).Value = idasiento
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Buscar el registro de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function BuscarXtipoXiddocumento(ByVal prm_tipo As Integer, prm_iddocumento As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            BuscarXtipoXiddocumento = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__BuscarXtipoXiddocumento"
                .Parameters.Add("@tipo", SqlDbType.Int).Value = prm_tipo
                .Parameters.Add("@iddocumento", SqlDbType.Int).Value = prm_iddocumento
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                BuscarXtipoXiddocumento = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al BuscarXtipoXiddocumento el registro de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarUltimo registro de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarTodos los registros de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function CargarXidtercero(ByVal prm_int_idtercero As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarXidtercero = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "asiento__CargarXidtercero"
                .Parameters.Add("@idtercero", SqlDbType.Int).Value = prm_int_idtercero
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarXidtercero = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarXidtercero los registros de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function calcularSaldo() As Decimal
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            calcularSaldo = 0
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.Text
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "select dbo.FX_asiento__saldoXidterceroXfechaXidasiento(" & idtercero & ",'" & fecha.Month & "/" & fecha.Day & "/" & fecha.Year & "', " & idasiento & ")"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                obj_Reader.Read()
                dec_saldo = obj_Reader.GetValue(0)
                calcularSaldo = Format(obj_Reader.GetValue(0), "n" & int_cantdecimales)
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarXidtercero los registros de asiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_asiento_Clon As New cls_asiento_
        obj_asiento_Clon.int_idasiento = Me.int_idasiento
        obj_asiento_Clon.int_idtercero = Me.int_idtercero
        obj_asiento_Clon.dte_fecha = Me.dte_fecha
        obj_asiento_Clon.int_tipoimporte = Me.int_tipoimporte
        obj_asiento_Clon.dbl_importe = Me.dbl_importe
        obj_asiento_Clon.str_observaciones = Me.str_observaciones
        obj_asiento_Clon.int_tipo = Me.int_tipo
        obj_asiento_Clon.int_iddocumento = Me.int_iddocumento
        obj_asiento_Clon.int_idregistro = Me.int_idregistro
        obj_asiento_Clon.int_idasientoconcepto = Me.int_idasientoconcepto
        obj_asiento_Clon.dte_vencimiento = Me.dte_vencimiento
        obj_asiento_Clon.dte_vencimientoRE = Me.dte_vencimientoRE
        obj_asiento_Clon.col_Items = Me.col_Items
        Return obj_asiento_Clon
    End Function

End Class
